package org.jeecg.modules.system.model;

import lombok.Data;
import org.jeecg.modules.system.entity.SysDepart;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 部门表 存储树结构数据的实体类
 * <p>
 * 
 * @Author Steve
 * @Since 2019-01-22 
 */
@Data
public class SysDepartTreeModel extends SysDepart implements Serializable{
	
    private static final long serialVersionUID = 1L;
    
    /** 对应SysDepart中的id字段,前端数据树中的key*/
    private String key;

    /** 对应SysDepart中的id字段,前端数据树中的value*/
    private String value;

    /** 对应depart_name字段,前端数据树中的title*/
    private String title;


    private boolean isLeaf;

//    private boolean disableCheckbox;
//    private boolean selectable;

    private List<SysDepartTreeModel> children = new ArrayList<>();


    /**
     * 将SysDepart对象转换成SysDepartTreeModel对象
     * @param sysDepart
     */
	public SysDepartTreeModel(SysDepart sysDepart) {
//	    if (StringUtils.isNotBlank(sysDepart.getOrgCategory()) && "0".equalsIgnoreCase(sysDepart.getOrgCategory())){
//	        this.disableCheckbox = true;
//	        this.selectable = true;
//        } else {
//            this.disableCheckbox = false;
//            this.selectable = false;
//        }
		this.key = sysDepart.getId();
        this.value = sysDepart.getId();
        this.title = sysDepart.getDepartName();
        this.setId(sysDepart.getId());
        this.setParentId(sysDepart.getParentId());
        this.setDepartName(sysDepart.getDepartName());
        this.setDepartNameEn(sysDepart.getDepartNameEn());
        this.setDepartNameAbbr(sysDepart.getDepartNameAbbr());
        this.setDepartOrder(sysDepart.getDepartOrder());
        this.setDescription(sysDepart.getDescription());
        this.setOrgCategory(sysDepart.getOrgCategory());
        this.setOrgType(sysDepart.getOrgType());
        this.setOrgCode(sysDepart.getOrgCode());
        this.setMobile(sysDepart.getMobile());
        this.setFax(sysDepart.getFax());
        this.setAddress(sysDepart.getAddress());
        this.setSort(sysDepart.getSort());
        this.setStatus(sysDepart.getStatus());
        this.setCreateBy(sysDepart.getCreateBy());
        this.setCreateTime(sysDepart.getCreateTime());
        this.setUpdateBy(sysDepart.getUpdateBy());
        this.setUpdateTime(sysDepart.getUpdateTime());
    }


    public SysDepartTreeModel() { }

//    /**
//     * 重写equals方法
//     */
//    @Override
//    public boolean equals(Object o) {
//        if (this == o) {
//			return true;
//		}
//        if (o == null || getClass() != o.getClass()) {
//			return false;
//		}
//        SysDepartTreeModel model = (SysDepartTreeModel) o;
//        return Objects.equals(id, model.id) &&
//                Objects.equals(parentId, model.parentId) &&
//                Objects.equals(departName, model.departName) &&
//                Objects.equals(departNameEn, model.departNameEn) &&
//                Objects.equals(departNameAbbr, model.departNameAbbr) &&
//                Objects.equals(departOrder, model.departOrder) &&
//                Objects.equals(description, model.description) &&
//                Objects.equals(orgCategory, model.orgCategory) &&
//                Objects.equals(orgType, model.orgType) &&
//                Objects.equals(orgCode, model.orgCode) &&
//                Objects.equals(mobile, model.mobile) &&
//                Objects.equals(fax, model.fax) &&
//                Objects.equals(address, model.address) &&
//                Objects.equals(sort, model.sort) &&
//                Objects.equals(status, model.status) &&
//                Objects.equals(delFlag, model.delFlag) &&
//                Objects.equals(createBy, model.createBy) &&
//                Objects.equals(createTime, model.createTime) &&
//                Objects.equals(updateBy, model.updateBy) &&
//                Objects.equals(updateTime, model.updateTime) &&
//                Objects.equals(children, model.children);
//    }
//
//    /**
//     * 重写hashCode方法
//     */
//    @Override
//    public int hashCode() {
//
//        return Objects.hash(id, parentId, departName, departNameEn, departNameAbbr,
//        		departOrder, description, orgCategory, orgType, orgCode, mobile, fax, address,
//                sort, status, delFlag, createBy, createTime, updateBy, updateTime,
//        		children);
//    }

}
